class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm;
    // data中的属性名
    this.key = key;
    // 回调函数负责视图更新，需要单独定义
    this.cb = cb;

    // 把watcher对象记录到Dep类的静态属性target
    Dep.target = this;
    // vm[key]会触发属性的 get 方法，会调用到 Observer 中的 `Dep.target && dep.addSub(Dep.target)`
    this.oldValue = vm[key];
    // 赋空，防止多次添加
    Dep.target = null;
  }
  // 数据变化时更新视图
  update() {
    let newValue = this.vm[this.key];
    if (newValue === this.oldValue) {
      return;
    }
    this.cb(newValue);
  }
}
